Untitled
Carga de paquetes
::: {.cell labe=‘carga- paquetes’ code- fold=‘show’}
# Carga de paquetes
library(tidyverse)
library(DT)
library(sf)
library(rgdal)
library(raster)
library(terra)
library(leaflet)
library(leaflet.extras)
library(leafem)
library(viridisLite):::
Carga de datos
Cantones
::: {.cell labe=‘carga- cantones’ code- fold=‘show’}
cantones<-
st_read("cantones_2020_simp_10m.geojson",
quiet= TRUE
) |>
st_transform(4326):::
Carga de datos
Registros de viperidos
::: {.cell labe=‘carga- viperidos’ code- fold=‘show’}
# Carga de datos de viperidos de Costa Rica
viperidos <-
st_read(
"viperidos.csv",
options = c(
"X_POSSIBLE_NAMES=decimalLongitude", # columna de longitud decimal
"Y_POSSIBLE_NAMES=decimalLatitude" # columna de latitud decimal
),
quiet = TRUE
)
# Asignación del CRS WGS84
st_crs(viperidos) <- 4326:::
Unión (join) espacial de cantones que son pologonos con registros de viperidos (pts)
::: {.cell labe=‘carga- union-viperidos-cantones’ code- fold=‘show’}
viperidos_union_cantones <-
st_join(
x = viperidos,
y = dplyr::select(cantones, cod_canton), # selección de columna cod_canton
join = st_within
)
# Despliegue de los datos unidos de viperidos y la columna cod_canton de cantones
viperidos_union_cantones |>
st_drop_geometry() |>
dplyr::select(species, locality, cod_canton) |>
datatable(
colnames = c("Especie", "Localidad", "Código de cantón"),
options = list(
pageLength = 5,
language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json')
)
):::
Conteo de viperidos por cantón
::: {.cell labe=‘carga- conteo-viperidos-cantones’ code- fold=‘show’}
riqueza_especies_viperidos_cantones <-
viperidos_union_cantones |>
st_drop_geometry() |> #para quitar la geometria
group_by(cod_canton) |>
summarize(riqueza_especies_viperidos = n_distinct(species, na.rm = TRUE)) # n.a para quitar nulos:::
##3. Unión no espacial de cantones con el dataframe de riqueza de especies en cantones
::: {.cell labe=‘carga- union-cantones-riqueza’ code- fold=‘show’}
cantones_union_riqueza <-
left_join(
x = cantones,
y = riqueza_especies_viperidos_cantones,
by = "cod_canton"
) |>
replace_na(list(riqueza_especies_viperidos = 0)) #para cambiar nulo por 0:::
##4 Mapa
::: {.cell labe=‘mapa riqueza’ code- fold=‘show’}
# Paleta de colores de riqueza de especies
colores_riqueza_especies <-
colorNumeric(
palette = "Reds",
domain = cantones_union_riqueza$riqueza_especies_viperidos,
na.color = "transparent"
)
# Paleta de colores de especies
colores_especies <- colorFactor(
palette = viridis(length(unique(viperidos$species))),
domain = viperidos$species
)
# Mapa leaflet
leaflet() |>
setView(
lng = -84.19452,
lat = 9.572735,
zoom = 7) |>
addTiles(group = "Mapa general (OpenStreetMap)") |>
addProviderTiles(
providers$Esri.WorldImagery,
group = "Imágenes satelitales (ESRI World Imagery)"
) |>
addPolygons(
data = cantones_union_riqueza,
fillColor = ~ colores_riqueza_especies(cantones_union_riqueza$riqueza_especies_viperidos),
fillOpacity = 0.8,
color = "black",
stroke = TRUE,
weight = 1.0,
popup = paste(
paste("<strong>Cantón:</strong>", cantones_union_riqueza$canton),
paste("<strong>Riqueza de especies:</strong>", cantones_union_riqueza$riqueza_especies_viperidos),
sep = '<br/>'
),
group = "Riqueza de especies"
) |>
addScaleBar(
position = "bottomleft",
options = scaleBarOptions(imperial = FALSE)
) |>
addLegend(
position = "bottomleft",
pal = colores_riqueza_especies,
values = cantones_union_riqueza$riqueza_especies_viperidos,
group = "Riqueza de especies",
title = "Riqueza de especies"
) |>
addCircleMarkers(
data = viperidos,
stroke = F,
radius = 4,
fillColor = ~colores_especies(viperidos$species),
fillOpacity = 1.0,
popup = paste(
paste0("<strong>Especie: </strong>", viperidos$species),
paste0("<strong>Localidad: </strong>", viperidos$locality),
paste0("<strong>Fecha: </strong>", viperidos$eventDate),
paste0("<strong>Fuente: </strong>", viperidos$institutionCode),
paste0("<a href='", viperidos$occurrenceID, "'>Más información</a>"),
sep = '<br/>'
),
group = "Registros de presencia"
) |>
addLegend(
position = "bottomright",
pal = colores_especies,
values = viperidos$species,
title = "Especies",
group = "Registros de presencia"
) |>
addLayersControl(
baseGroups = c(
"Mapa general (OpenStreetMap)",
"Imágenes satelitales (ESRI World Imagery)"
),
overlayGroups = c(
"Riqueza de especies",
"Registros de presencia"
)
) |>
addResetMapButton() |>
addSearchOSM() |>
addMouseCoordinates() |>
addFullscreenControl() |>
hideGroup("Registros de presencia") :::